home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
magazyn_amiga
/
6
/
ami016_a500_i_2_at-bus.txt
< prev
next >
Wrap
Text File
|
1997-09-16
|
5KB
|
117 lines
AMIGA 500 I DWA AUTOBUSY
<lead>Do napisania tego krótkiego artykuîu skîoniîy mnie
pojawiajâce sië w Internecie pytania, dotyczâce sposobu
podîâczenia drugiego urzâdzenia ze zîâczem AT-Bus do Amigi 500,
rozbudowanej o kontroler twardego dysku -- Mega Ram HD -- firmy
Elsat.
<a>Paweî Stypuîa
<txt>Do podîâczenia drugiego urzâdzenia standardu AT-Bus
potrzebna jest taôma do twardego dysku 3,5-calowego z trzema
nasadkami, np. od blaszaka. Jednâ z nasadek nakîadamy na zîâcze
twardego dysku na pîycie Mega RAM-u, natomiast dwa pozostaîe
sîuûâ do podîâczenia dwóch urzâdzeï pracujâcych w ukîadzie
Master/Slave. Oczywiôcie dodatkowe urzâdzenie musi sië znajdowaê
poza obudowâ Mega RAM-u. Jeûeli ktoô ma "mocny" zasilacz, np. od
blaszaka, to dobrze jest wziâê zasilanie przez rozdzielacz ze
zîâcza znajdujâcego sië wewnâtrz Mega RAM-u. Przy oryginalnym
zasilaczu mogâ bowiem wystâpiê problemy. Zaleûy to od mocy
pobieranej przez dyski. Naleûy pamiëtaê o odpowiednim ustawieniu
zworek. Urzâdzenie Master bëdzie widziane jako unit 0, a Slave
jako unit 1.
Po poprawnym podîâczeniu urzâdzeï i wîâczeniu komputera okazuje
sië jednak, ûe urzâdzenie Slave nie jest widziane przez komputer.
Przyczynâ tego jest specyficzny sposób napisania sterownika
elsat.device, który znajduje sië w pamiëci ROM na pîycie
kontrolera.
Jeûeli mamy podîâczony do expansion port tylko kontroler twardego
dysku, to jego pamiëê ROM rozpoczyna sië od adresu $E90000.
W dalszej czëôci przedstawië sposób ominiëcia tego problemu, ale
najpierw chciaîbym powiedzieê, co go powoduje. Otóû w grupie
rejestrów AT-TASK-FILE (sâ to rejestry znajdujâce sië w kaûdym
urzâdzeniu standardu AT-Bus) istnieje rejestr SDH, w którym
zapisujemy numer urzâdzenia, dîugoôê sektora oraz numer gîowicy.
Wyglâda on nastëpujâco:
<l> bit 7 równy 1
bity 6-5 rozmiar sektora, 512 bajtów kodowane jako 01
bit 4 numer urzâdzenia: 1-Slave, 0-Master
bity 3-0 numer gîowicy od 0 do 15
<txt>Elsat.device otwierajâc urzâdzenie przygotowuje sobie cztery
najstarsze bity tego rejestru i wpisuje jako bajt do odpowiedniej
struktury z przesuniëciem $14 od jej poczâtku. Nastëpnie
wykonywane sâ rozkazy IDENTIFY DRIVE oraz EXECUTE DIAGNOSTIC i
przed wykonaniem kaûdego z nich nastëpuje przepisanie bajtu ze
struktury do rejestru SDH. Wyglâda to tak: move.w
$14(A3),$C00(A0). Rejestr SDH znajduje sië pod adresem $C01(A0).
Wszystko byîoby w porzâdku, gdyby wczeôniej przygotowany bajt
znajdowaî sië pod adresem $15(A3) (w A3 adres struktury). W tej
sytuacji bity 4-7 rejestru SDH zawsze sâ wyzerowane, co powoduje,
ûe rozkazy odnoszâce sië do dysku Slave (unit 1) nigdy nie bëdâ
przez niego wykonane.
Taki rozkaz wystëpuje w elsat.device aû szeôê razy pod
nastëpujâcymi adresami: $E90318, $E9032E, $E90640, $E906C4,
$E9078E, $E907AC. Rozkaz move.w $14(A3),$C00(A0) naleûy zmieniê
na move.b $14(A3),$C01(A0). W pamiëci jest to ciâg cyfr
$316B00140C00, który naleûy zmieniê na $116B00140C01.
Idealnym rozwiâzaniem byîoby zastâpienie pamiëci ROM na pîycie
kontrolera poprawnie zaprogramowanymi pamiëciami EPROM. Ale nie
kaûdy ma dostëp do programatora EPROM-ów i nie kaûdy potrafi
wymieniê pamiëê ROM, gdyû jest ona wlutowana w pîytkë. Podajë
wiëc sposób na ominiëcie bîëdów îatwiej, choê moûe mniej
elegancko.
Pierwszâ czynnoôciâ, jakâ musimy wykonaê, jest zaalokowanie $1744
bajtów w pamiëci Fast RAM. Dla dalszych rozwaûaï adres
zaalokowanej pamiëci nazwijmy NewDevice. Potem musimy skopiowaê
elsat.device ($1744 bajtów) spod adresu $E90000 do zaalokowanej
pamiëci. Nastëpnie poprawiamy bîëdy, zmieniajâc wyûej
przedstawione ciâgi cyfr, znajdujâce sië w zaaolokowanej pamiëci
pod adresami: NewDevice+$318, NewDevice+$32E, NewDevice+$640,
NewDevice+$6C4, NewDevice+78E, NewDevice+7AC. Po tej czynnoôci
przychodzi czas na zmianë wektorów elsat.device. W liôcie
device'ów odnajdujemy wskaúnik struktury device dla elsat.device,
np. za pomocâ funkcji FINDNAME z exec.library. Nastëpnie
zmieniamy dwa wektory (np. funkcja SETFUNCTION), a mianowicie
wektor -$6, na adres NewDevice+$4ec i wektor -$1E na
NewDevice+$586. Po tych czynnoôciach mamy juû sterownik "widzâcy"
dwa dyski.
Partycje na drugim dysku tworzymy, uûywajâc np. programu
HDToolBox. Program ten naleûy uruchomiê z CLI, podajâc jako
parametr elsat.device. Program ten dziaîa poprawnie z systemem
2.x lub lepszym. Z jego zdobyciem nie bëdzie problemu.
Prawdopodobnie bëdzie go miaî znajomy posiadacz Amigi 1200.
Jeûeli podîâczony drugi dysk ma juû wczeôniej utworzone partycje,
to aby je doîâczyê do systemu, naleûy otworzyê elsat.device unit
1, uûywajâc funkcji OpenDevice, nastëpnie wykonaê funkcjë DoIO z
rozkazem 22 (io_Command=22 w strukturze IOStdReq) i na koniec
zamykamy elsat.device (CloseDevice). Partycje zostanâ podîâczone,
jeôli ich nazwy bëdâ inne niû nazwy partycji na pierwszym dysku.
W pierwszym zdaniu celowo uûyîem sîowa "urzâdzenia", a nie dysk,
poniewaû moûe to byê np. CD-ROM. W tym wypadku nie otwieramy
elsat.device i nie wykonujemy rozkazu 22, tylko tworzymy
odpowiedniâ mountlistë.
Myôlë, ûe ten krótki opis wystarczy do napisania programu
usuwajâcego problemy z elsat.device, pod warunkiem, ûe choê
trochë potrafisz programowaê w asemblerze bâdú w C. Oczywiôcie
program taki musi byê wywoîywany po kaûdym zresetowaniu
komputera, a zatem najlepiej wywoîanie umieôciê zaraz na poczâtku
startup-sequence.